record(ROAD-V1-C6): punch-list item 9 asks for a lever the project refuted and a flip that landed 10 days before the item was written - #535
Open
localai-bot wants to merge 1 commit into
Conversation
…futed and a flip that landed 10 days before the item was written Closes #534. Owning row: `SERVE-ASYNC-LLM` (roadmap row 6, `ROAD-V1-C6`), which stays `GATING`. No lifecycle state is promoted and no `src/`, `include/` or `tests/` file is touched. Dispatched as a fresh implementer on punch-list item 9 of `.agents/specs/roadmap-v1-completion.md` §3, whose W-plan reads "land the depth-2 throughput lever, flip `runner_supports_async` prod-ON, close priority/busy-loop GPU gates". Re-verifying the gap against the tree first, as AGENTS.md requires, found two of the three clauses already stale on the day the spec was committed (`489f7771`, 2026-07-27), and the third half covered. Clause 1, the depth-2 throughput lever, landed as `6ea7856` on 2026-07-16 and is REFUTED in that commit's own title: c16 throughput -0.32% against a >=+1.5% gate, because the removed syncs are O(10-100 us) of a ~165 ms step. The next day the `CLAIM-W3-ASYNC-DISC` discriminator measured vLLM's OWN async self-A/B at -0.66 to -0.91% throughput and found upstream ships async as the default regardless, so `async-serving.md` records "There is NO depth-2 throughput unlock to find" and retires the speed-credit floor. Acting on the clause re-opens a closed negative. Clause 2 flipped as `a0013a2` on 2026-07-17 via the CPU-unit-tested `AsyncRunnerFlagIsOn` predicate, DGX-proven token-neutral. The item's title conflates that runner-side default with `SERVE-ASYNC-LLM`, a different row, which is also already the production path (`server_main.cpp:731-734`). No "prod-ON" flip is left under either reading; the row holds on broader every-axis parity. Clause 3 splits. `ENG-CORE-BUSY-LOOP`'s G1 has been covered in substance since `1718bf155` (2026-08-05) by `tests/parity/test_qwen36_async_serving.cpp`, which drives AsyncLLM -> EngineCoreProc depth-2 token-exact against the same pinned oracle continuation the SACRED sync gate uses, and G4 by the SERVE-GATE-ONLINE binding `9ecd9d0` 114/124 on that same path. `ENG-PRIORITY-SCHED` is the one real residual: `--scheduling-policy priority` reaches the production server but no priority-vs-FCFS gate exists at the engine/model level, so G1 cannot be "rerun" — it has to be written first. Both rows still carry a 2026-07-10 "GPU held by the SERVE-GATE-ONLINE campaign" deferral that four bindings have since expired. Superseded text is struck and kept in place, never deleted, because it is what the plan said and a reader must be able to see both. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: ClaudeCode:claude-opus-5 [ClaudeCode]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #534. Owning row:
SERVE-ASYNC-LLM(roadmap row 6,ROAD-V1-C6), which staysGATING. Roadmap issue table, spec and this body all carry #534.I was dispatched as a fresh implementer on punch-list item 9 of
.agents/specs/roadmap-v1-completion.md§3, whose recorded W-plan was "land the depth-2throughput lever, flip
runner_supports_asyncprod-ON, close priority/busy-loop GPUgates". Re-verifying the gap against the tree first, as AGENTS.md requires, found two
clauses already stale on the day the spec was committed and the third half covered.
This is a reconciliation, not an implementation: no
src/,include/ortests/file is touched and no lifecycle state moves.
Clause by clause
6ea7856(2026-07-16)runner_supports_asyncprod-ONa0013a2(2026-07-17)1718bf155,52d76f3a9/ nothingThe spec is
489f7771, 2026-07-27.1. The lever is not merely landed, its objective was retired
6ea7856implementedAsyncOutputPool(persistent sampled-id/pinned buffers plus aSamplergreedy scratch, removing every per-stepcudaMalloc/cudaFree/cudaHostAlloc/event-create from the sampled-id path, including the overlap-killing
cudaFreeinsideget_output). Its own commit title carries the verdict:lever REFUTED as tput unlock,c16 throughput -0.32% against a
>=+1.5%gate, because the removed syncs areO(10-100 us) of a ~165 ms step.
The next day
CLAIM-W3-ASYNC-DISCmeasured vLLM's OWN async self-A/B and found upstreampays -0.66 to -0.91% throughput for async scheduling and ships it as the default
anyway.
async-serving.mdrecords the conclusion verbatim: "There is NO depth-2throughput unlock to find, D6's search target does not exist in the reference either",
and "The speed-credit floor for W3 as a lever is retired with it". Acting on this
clause reopens a closed negative result, which is worse than acting on a stale one.
2.
runner_supports_asyncandSERVE-ASYNC-LLMare different things, and both are already onVT_ASYNC_RUNNERhas been default-ON sincea0013a2via the CPU-unit-testedAsyncRunnerFlagIsOnpredicate (include/vllm/v1/worker/gpu/async_runner_flag.h:38), sowith no environment set
runner_supports_async()is TRUE andLoadedEngineresolves anAsyncScheduler+max_concurrent_batches=2. DGX-proven token-neutral: 27B 235/235 and35B 315/315, default arm bit-identical to both rollback arms.
The item's title and the §1 C6 cell instead read "
SERVE-ASYNC-LLM(GATING -> prod-ON)",which conflates that runner-side default with a different row.
SERVE-ASYNC-LLMis theAsyncLLM streaming serving API, and it is likewise already the production path:
src/vllm/entrypoints/openai/server_main.cpp:731-734, "the production server usesAsyncLLM over EngineCoreProc's dedicated engine thread", with the capacity-derived fixed
HTTP worker pool as the default and
VLLM_CPP_HTTP_FIXED_POOL=0retained only as asame-binary diagnostic. Reading
GATINGas "not in production" is the error; the row isGATINGon its declared broader every-axis parity (27B ratified at 115/124 two-grideffective, 35B open under
ROAD-V1-A) plus open bug #294.That also unblocks a consumer on paper.
BACKEND-GATE-CUDA-SGLANGrecordsBLOCKED on SERVE-ASYNC-LLMwith the rationale "HTTP TTFT/ITL cannot be measuredhonestly yet", which describes the pre-W2 buffered-SSE server. The exit criterion
that spike actually attached to the row, "Real incremental SSE, in-flight batching, and
streaming timing test pass", was met on 2026-07-10; the arrival-time assertion is
tests/vllm/entrypoints/openai/test_api_server.cpp:622-634(
dispatched < first_arrival < completed), andSERVE-GATE-ONLINEhas since measuredHTTP TTFT/ITL on that exact path against vLLM across five recorded bindings. Its residual
dependency is its own exact-equivalence preflight.
3. The third clause is half stale and half the only real work in the item
ENG-CORE-BUSY-LOOPG1 (token-exact twins) has been covered in substance since1718bf155(2026-08-05):tests/parity/test_qwen36_async_serving.cppdrivesLoadedEngine::async_engine()->AsyncLLM->EngineCoreProc::step_with_batch_queue(depth-2) token-exact against the same pinned oracle continuation the SACRED sync gate
uses, proven RED->GREEN on GB10 under
compute-sanitizer, with the classic-dense armtest_qwen3_dense_async_serving.cpp(52d76f3a9) alongside. G4 is covered by theSERVE-GATE-ONLINEbinding9ecd9d0114/124, which runs that path with async default ON.I did not promote the row: rerunning a gate is the operator's job.
ENG-PRIORITY-SCHEDis the one genuinely open leaf.--scheduling-policy priorityis plumbed all the way to the production server (
server_main.cpp:408-411,672-673->SchedulerPolicyFromString->SchedulerConfig::policy), but no priority-vs-FCFS gateexists at the engine or model level anywhere under
tests/. What exists is scheduler-unit(
test_scheduler.cpp:674,916ordering and preemption,test_request_queue.cppheapordering) and C-ABI wire-name validation (
tests/capi/test_capi.cpp:1159); nothing drivesa real engine with
policy=kPriorityand compares token streams. So its G1 cannot be"rerun" as both the item and the row imply, it has to be written first, RED-first.
Both rows still record "deferred to the next GPU-idle window, GPU held by the
SERVE-GATE-ONLINEcampaign", a 2026-07-10 scheduling note that five successivebindings have since expired. That phrasing is what makes the item read as GPU-blocked
when it is not.
The surfaces reconciled
.agents/specs/roadmap-v1-completion.md, §3 item 9 (the punch-list entry), the §1 C6cell, and item 5's
ROAD-V1-ASGLang clause.agents/engine-matrix.md, theSERVE-ASYNC-LLM,ENG-CORE-BUSY-LOOPandENG-PRIORITY-SCHEDrows; also repoints one stale local anchor that ARCH-ONE-SURFACE(arch(ARCH-ONE-SURFACE): the OpenAI server becomes a THIN ABI CLIENT — vllm_server_main, ABI v17 #189) moved out of
examples/server/main.cpp.agents/backend-matrix.md, theBACKEND-GATE-CUDA-SGLANGblocker rationale.agents/coordination.md, queue rows 2 and 6, whose "next handoff" still directsCLAIM-ASYNC-SCHED-W3to land a flip that landed.agents/specs/async-serving.md, a## Nowreconciliation section carrying Punch-list item 9 (ROAD-V1-C6) directs a lever the project refuted and a flip that landed 10 days before the item was written #534.agents/specs/roadmap-v1-audit-2026-07-31.md, whose finding 4 is where the"GATING, not prod-ON" reading originates
.agents/roadmap_v1.md, the issue-table row for Punch-list item 9 (ROAD-V1-C6) directs a lever the project refuted and a flip that landed 10 days before the item was written #534Every superseded sentence is struck and kept in place, never deleted. The old text is
what the plan said, and a reader has to be able to see both the claim and its correction.
docs/FEATURES.mdcheck-doc-checkpointclassifies.agents/backend-matrix.mdas a feature surface andrequires
docs/FEATURES.mdto move with it, and a checker's message is the authority onwhat it enforces. Its Priority scheduling cell read
◐ gating, which overstatesreadiness in exactly the way this PR corrects, so it now names the reachable flag and the
missing gate. One existing cell amended, no new row or paragraph: the page is a keyed
table with a 220-char cell cap and no paragraph headroom. No other public doc moves,
because no row changed lifecycle state and no measurement was recorded.
Gates
scripts/agent-preflight.sh --staged: All gates green, includingdoc-checkpoint,check-public-doc-tables,check-gate-commands,audit-live-rows,now-current,check-role-discipline, the trailer suites and every mutation suite.An earlier run of the same command was red on
test_cpu_x86_llamacpp_floor, which readsthe real host loadavg and is #529, not this branch; it passed on the quiet re-run.
Not done
No GPU work and no new measurement: there was nothing to measure. The dgx GPU lock was
never taken and
local-ai-workerwas never touched. The branch isrow/SERVE-ASYNC-LLM-534rather thanrow/SERVE-ASYNC-LLMbecause a stale remote branchof the latter name already exists at
8a8bed99(the pre-squash form of #31, whose contentis on main as
1718bf155); pushing over it would have been a non-fast-forward.Needs a fresh reviewer who is not me. Merge authority is not mine.